﻿/**
* @author ZhangHuihua@msn.com
* 
*/
(function ($) {
    $.fn.extend({

        /**
        * options: reverse[true, false], eventType[click, hover], currentIndex[default index 0]
        * 			stTab[tabs selector], stTabPanel[tab panel selector]
        * 			ajaxClass[ajax load], closeClass[close tab]
        */
        tabs: function (options) {
            var op = $.extend({ reverse: false, eventType: "click", currentIndex: 0, stTabHeader: "> .tabsHeader", stTab: ">.tabsHeaderContent>ul", stTabPanel: "> .tabsContent", ajaxClass: "j-ajax", closeClass: "close", prevClass: "tabsLeft", nextClass: "tabsRight" }, options);

            return this.each(function () {
                initTab($(this));
            });

            function initTab(jT) {
                var jSelector = jT.add($("> *", jT));
                var jTabHeader = $(op.stTabHeader, jSelector);
                var jTabs = $(op.stTab + " li", jTabHeader);
                var jGroups = $(op.stTabPanel + " > *", jSelector);

                jTabs.unbind().find("a").unbind();
                jTabHeader.find("." + op.prevClass).unbind();
                jTabHeader.find("." + op.nextClass).unbind();

                jTabs.each(function (iTabIndex) {
                    if (op.currentIndex == iTabIndex) $(this).addClass("selected");
                    else $(this).removeClass("selected");

                    if (op.eventType == "hover") $(this).hover(function (event) { switchTab(jT, iTabIndex) });
                    else $(this).click(function (event) { switchTab(jT, iTabIndex) });

                    $("a", this).each(function () {
                        if ($(this).hasClass(op.ajaxClass)) {
                            $(this).click(function (event) {
                                var jGroup = jGroups.eq(iTabIndex);
                                if (this.href && !jGroup.attr("loaded")) jGroup.loadUrl(this.href, {}, function () {
                                    jGroup.find("[layoutH]").layoutH();
                                    jGroup.attr("loaded", true);
                                });
                                event.preventDefault();
                            });

                        } else if ($(this).hasClass(op.closeClass)) {
                            $(this).click(function (event) {
                                jTabs.eq(iTabIndex).remove();
                                jGroups.eq(iTabIndex).remove();
                                if (iTabIndex == op.currentIndex) {
                                    op.currentIndex = (iTabIndex + 1 < jTabs.size()) ? iTabIndex : iTabIndex - 1;
                                } else if (iTabIndex < op.currentIndex) {
                                    op.currentIndex = iTabIndex;
                                }
                                initTab(jT);
                                return false;
                            });
                        }
                    });
                });
                switchTab(jT, op.currentIndex);
            }

            function switchTab(jT, iTabIndex) {
                var jSelector = jT.add($("> *", jT));
                var jTabHeader = $(op.stTabHeader, jSelector);
                var jTabs = $(op.stTab + " li", jTabHeader);
                var jGroups = $(op.stTabPanel + " > *", jSelector);

                var jTab = jTabs.eq(iTabIndex);
                var jGroup = jGroups.eq(iTabIndex);
                if (op.reverse && (jTab.hasClass("selected"))) {
                    jTabs.removeClass("selected");
                    jGroups.hide();
                } else {
                    op.currentIndex = iTabIndex;
                    jTabs.removeClass("selected");
                    jTab.addClass("selected");

                    jGroups.hide().eq(op.currentIndex).show();
                }

//                if (!jGroup.attr("inited")) {
//                    jGroup.attr("inited", 1000).find("input[type=text]").filter("[alt]").inputAlert();
//                }
            }

        }
    });
})(jQuery);